package com.java.map;

import java.util.Map;
import java.util.Set;

import org.junit.Test;

import com.collection.model.Student;

/**
 * LinkedHashMap测试类
 * 		Map接口的哈希表和链接列表实现，具有可预知的迭代顺序
 *				由哈希表保证键的唯一性
 *				由链表保证键的有序性（存储和取出的顺序一致）
 * @author LC
 *
 */
public class LinkedHashMap {
	
	/**
	 * LinkedHashMap测试01
	 * 		Map<String, String> map = new java.util.LinkedHashMap<>() ;
	 * 特点：
	 * 		键值唯一、元素有序（插入和取出的顺序一致）
	 */
	@Test
	public void testLinkedHashMap_01() {
		Map<String, String> map = new java.util.LinkedHashMap<>() ;
		
		map.put("002", "北京市") ;
		map.put("001", "上海市") ;
		map.put("003", "天津市") ;
		map.put("001", "上海市") ;
		
		System.out.println("迭代输出map集合中所有的元素");
		Set<String> keys = map.keySet() ;
		for (String key : keys) {
			System.out.println(key +":" + map.get(key));
		}
	}
	
	/**
	 * LinkedHashMap测试02
	 * 		Map<Student, String> map = new java.util.LinkedHashMap<>() ;
	 * 特点：
	 * 		键值唯一、元素有序（插入和取出的顺序一致）
	 */
	@Test
	public void testLinkedHashMap_02() {
		Map<Student, String> map = new java.util.LinkedHashMap<>() ;
		
		Student student01 = new Student("张三01",21) ;
		Student student02 = new Student("张三02",22) ;
		Student student03 = new Student("张三03",23) ;
		Student student04 = new Student("张三04",24) ;
		
		map.put(student02, "002") ;
		map.put(student01, "001") ;
		map.put(student03, "003") ;
		map.put(student04, "004") ;
		map.put(student02, "002") ;
		
		System.out.println("迭代输出map集合中的所有元素");
		for(Map.Entry<Student, String> entry : map.entrySet()) {
			System.out.println(entry.getKey() +":" + entry.getValue());
		}
	}

}
